#include <bits/stdc++.h>
using ll=long long;
const int N=1e5+10;
ll n;
using namespace std;
ll myhash[3];
//字符串高进度加法
// string func(string s,string t)
// {
    
//     string ret;
//     int i=s.size()-1,j=t.size()-1,tmp=0;
//     while(i>=0||j>=0||tmp)
//     {
//         if(i>=0)tmp+=s[i--]-'0';
//         if(j>=0)tmp+=t[j--]-'0';
//         ret+=tmp%10-'0';
//         tmp/=10;
//     }
//     reverse(ret.begin(),ret.end());
//     return ret;
// }
// int main()
// {
//     ios::sync_with_stdio(false);
//     cin.tie(nullptr);
//     string s,t;
//     // while(true)
//     // {
//         cin>>s;cin>>t;
//         // string s1="";
//         cout<<func(s,t);
//     // }
    
//     return 0;
// }

struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) : val(x), next(nullptr) {}
};
 
//两个链表模拟高精度加法
//创建虚拟头节点
// class Solution {
//     public:
//     ListNode* reverse(ListNode* head)
//     {
//         ListNode* newhead=new ListNode(0);
//         ListNode* cur=head;
//         while(cur)
//         {
//             ListNode* next=cur->next;
//             cur->next=newhead->next;
//             newhead->next=cur;
//             cur=next;
//         }
//         cur=newhead->next;
//         delete newhead;
//         return cur;
//     }
//     ListNode* addInList(ListNode* head1, ListNode* head2)
//     {
//         head1=reverse(head1);
//         head2=reverse(head2);
//         int tmp=0;
//         ListNode* newhead=new ListNode(0);
//         ListNode* cur1=head1,*cur2=head2;
//         ListNode* prev=newhead;
//         while(cur1||cur2||tmp)
//         {
//             if(cur1)
//             {
//                 tmp+=cur1->val;
//                 cur1=cur1->next;
//             }
//             if(cur2)
//             {
//                 tmp+=cur2->val;
//                 cur2=cur2->next;
//             }
//             prev=prev->next=new ListNode(tmp%10);
//             tmp/=10;
//         }
//         cur1=newhead->next;
//         newhead=nullptr;
//         delete newhead;
//         return reverse(cur1);
//     }
// };

//字符串模拟高精度乘法
class Solution
{
    public:
        string solve(string s,string t)
        {
            string ret;
            int m=s.size(),n=t.size();
            vector<int> tmp(m+n);
            for(int i=0;i<m;i++)
            {
                for(int j=0;j<n;j++)
                    tmp[i+j]+=(s[i]-'0')*(t[i]-'0');
            }
            int c=0;
            for(auto& x: tmp)
            {
                c+=x;
                ret+=c%10+'0';
                c/=10;
            }
            while(c)
            {
                ret+=c%10+'0';
                c/=10;
            }
            while(ret.size()>1&&ret.back()=='0')ret.pop_back();
            reverse(ret.begin(),ret.end());
            return ret;
        }
};